const path = require('path')
const HtmlWebpackPlugin = require("html-webpack-plugin");
const distPath = path.resolve(__dirname, '../dist')
const CopyPlugin = require("copy-webpack-plugin");
module.exports = {
    // 模式
    mode: 'production',
    // 生成源码和压缩后代码的映射关系，方便调错
    devtool: 'source-map',
    // 入口文件
    entry: './src/main.js',
    // 出口文件
    output: {
        // 出口文件夹
        path: distPath,
        // 文件名
        filename: './js/app.bundle.js',
        // 每次打包清空dist目录，重新生成
        clean: true,
        // 静态资源的根目录
        publicPath: '/'
    },
    plugins: [
        new HtmlWebpackPlugin({
            // 指定模板
            template: path.resolve(__dirname, '../public/index.html'),
            filename: 'index.html',
            inject: 'body'
        }),
        new CopyPlugin({
            patterns: [
                {
                    from: path.resolve(__dirname, '../public'),
                    to: distPath,
                    // 忽略public下的index.html文件
                    globOptions: {
                        ignore: ["**/index.html"],
                    },
                },

            ],
        }),
    ],
    module: {
        rules: [
            {
                test: /\.ejs$/,
                loader: 'ejs-loader',
                options: {
                    variable: 'data'
                }
            },
            {
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader']
            }
        ]
    },
    resolve: {
        // .js 和 .ejs的文件可以省略后缀
        extensions: ['.js', '.ejs', '.less'],
        alias: {
            $v: path.resolve(__dirname, '../src/views'),
            // 组件目录别名 $com
            $com:path.resolve(__dirname, '../src/components'),
            // 配置控制器路径别名
            $c:path.resolve(__dirname, '../src/controllers'),
            // api 别名
            $a:path.resolve(__dirname, '../src/api'),
        }
    },
    performance: {
        // 关闭拷贝资源大小警告
        hints: false,
    }
}